export interface DictItem {
  /** 字典项的值 */
  value: string | number;
  /** 字典项的标签 */
  label: string;
  /** 字典项的描述 */
  description?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 扩展数据 */
  [key: string]: any;
}

export interface DictSelectProps {
  /** 字典类型代码 */
  dictType: string;
  /** 选择器的值 */
  value?: string | number | (string | number)[];
  /** 是否多选 */
  multiple?: boolean;
  /** 占位符 */
  placeholder?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否允许清除 */
  allowClear?: boolean;
  /** 选择器大小 */
  size?: 'large' | 'middle' | 'small';
  /** 自定义样式类名 */
  class?: string;
  /** 自定义样式 */
  style?: Record<string, any>;
  /** 宽度 */
  width?: number;
  /** 是否显示搜索框 */
  showSearch?: boolean;
  /** 搜索时过滤选项的函数 */
  filterOption?: boolean | ((input: string, option: DictItem) => boolean);
  /** 最大标签数量（多选时） */
  maxTagCount?: number;
  /** 下拉菜单的最大高度 */
  listHeight?: number;
  /** 是否在组件挂载时自动加载数据 */
  autoLoad?: boolean;
  /** 自定义API请求函数 */
  customApi?: (dictType: string) => Promise<DictItem[]>;
}

export interface DictSelectEmits {
  /** 值变化事件 */
  (e: 'update:value', value: string | number | (string | number)[]): void;
  /** 选择事件 */
  (e: 'change', value: string | number | (string | number)[], option: DictItem | DictItem[]): void;
  /** 搜索事件 */
  (e: 'search', value: string): void;
  /** 下拉框展开/收起事件 */
  (e: 'dropdownVisibleChange', open: boolean): void;
}